📝 Резюме · 📄 Оригинал (923 B)
https://t.me/Python_libr/3360

Боты для Discord на Python — проект для начинающих

Источник: https://t.me/Python_libr/3360


Что могут делать Discord боты?

Discord боты — это автоматизированные приложения, взаимодействующие с пользователями серверов Discord. Типичные функции:

  • Музыкальные боты: поиск и воспроизведение музыки из YouTube
  • Генераторы контента: создание мемов, шуток, рандомных картинок
  • Боты общения: ответы на сообщения, обучаемые чатботы
  • Модерация: удаление спама, управление пользователями
  • Игры: карточные игры, викторины, рулетки

Установка и начало работы

Требуемые библиотеки

pip install discord.py python-dotenv

Создание простого бота

import discord
from discord.ext import commands
import os
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

# Создание клиента с префиксом команд
bot = commands.Bot(command_prefix='!', intents=discord.Intents.default())

@bot.event
async def on_ready():
    print(f'{bot.user} успешно подключен!')

@bot.command(name='привет')
async def hello(ctx):
    """Простая команда приветствия"""
    await ctx.send(f'Привет, {ctx.author.mention}! 👋')

@bot.command(name='информация')
async def info(ctx):
    """Показывает информацию о боте"""
    embed = discord.Embed(
        title="О боте",
        description="Простой Discord бот на Python",
        color=discord.Color.blue()
    )
    embed.add_field(name="Автор", value="Python Libr")
    embed.add_field(name="Версия", value="1.0")
    await ctx.send(embed=embed)

bot.run(TOKEN)

Переменные окружения (.env файл)

DISCORD_TOKEN=your_bot_token_here

Основные компоненты архитектуры

graph TD
    A["Discord API"] --> B["discord.py<br/>библиотека"]
    B --> C["Bot класс"]
    C --> D{События}
    D --> E["on_ready"]
    D --> F["on_message"]
    D --> F2["on_member_join"]
    C --> G{Команды}
    G --> H["@bot.command"]
    G --> I["@bot.event"]

Обработка событий

@bot.event
async def on_message(message):
    """Срабатывает на каждое сообщение"""
    # Избегаем обработки сообщений самого бота
    if message.author == bot.user:
        return

    if message.content == 'привет':
        await message.channel.send(f'Привет, {message.author.name}!')

    # Обработать команды
    await bot.process_commands(message)

@bot.event
async def on_member_join(member):
    """Срабатывает, когда новый пользователь присоединяется"""
    channel = member.guild.system_channel
    if channel:
        await channel.send(f'Добро пожаловать, {member.mention}!')

@bot.event
async def on_command_error(ctx, error):
    """Обработка ошибок команд"""
    if isinstance(error, commands.CommandNotFound):
        await ctx.send('❌ Команда не найдена')
    else:
        await ctx.send(f'Ошибка: {error}')

Мощные команды с параметрами

@bot.command(name='рассчитать')
async def calculate(ctx, число1: int, число2: int, операция: str):
    """Калькулятор: !рассчитать 5 3 +"""
    операции = {
        '+': число1 + число2,
        '-': число1 - число2,
        '*': число1 * число2,
        '/': число1 / число2 if число2 != 0 else 'Деление на ноль!'
    }

    результат = операции.get(операция, 'Неизвестная операция')
    await ctx.send(f'Результат: {число1} {операция} {число2} = {результат}')

@bot.command(name='описание')
async def describe(ctx, пользователь: discord.Member = None):
    """Информация о пользователе"""
    пользователь = пользователь or ctx.author

    embed = discord.Embed(title=f"Информация о {пользователь.name}")
    embed.add_field(name="ID", value=пользователь.id, inline=False)
    embed.add_field(name="Создан", value=пользователь.created_at)
    embed.set_thumbnail(url=пользователь.avatar.url)

    await ctx.send(embed=embed)

Развертывание и лучшие практики

  1. Безопасность: никогда не коммитьте токены в GitHub — используйте .env файлы
  2. Масштабируемость: организуйте код в Cogs (расширения)
  3. Тестирование: используйте отдельный тестовый сервер Discord
  4. Логирование: ведите логи всех событий
  5. Документация: комментируйте все функции для будущего расширения

Полезные ресурсы

  • Официальная документация discord.py
  • Реестр ботов Discord для публикации вашего бота
  • Сообщества разработчиков для помощи и советов